package com.eastfair.venuebooking.exceptioncode;

import com.eastfair.annotation.base.LanguageTypeEnum;
import com.eastfair.core.context.ContextUtil;
import com.eastfair.core.exception.code.BaseExceptionCode;

/**
 * 场馆预定系统异常code定义
 * AABBBCCC   AA(11)  系统编号   BBB 模块    CCC 具体异常
 * 模块编号
 * 场地：001
 * 客户：002
 * 商机：003
 * 展会：004
 * 合同：005
 * 财务：006
 * 其他：007
 * 场馆预定:010
 */
public enum VenueBookingExceptionCode implements BaseExceptionCode {

    /*
     *********************展厅********************
     */
    /**
     * 已被展厅引用不可删除.
     */
    SP_NOT_DELL(11001001, "已被展厅引用不可删除！", ""),
    /**
     * 已被展厅引用不可修改.
     */
    SP_NOT_UPDATE(11001002, "已被展厅引用不可修改！", ""),
    /**
     * 场地计价方式不可为空.
     */
    SP_NOT_UNIT(11001004, "场地计价方式不可为空！", ""),

    /*
     *********************客户********************
     */
    /**
     * 客户不存在
     */
    CUS_NOT_EXIST(11002001, "客户不存在", ""),
    /**
     * 当前用户已关注过该客户
     */
    CUS_USER_START_EXIST(11002002, "当前用户已关注过该客户", ""),
    /**
     * 销售线索不存在
     */
    CLUE_NOT_EXIST(11002003, "销售线索不存在", ""),
    /**
     * 联系人不存在.
     */
    CONTACT_NOT_EXIST(11002004, "联系人不存在", ""),
    /**
     * 已被销售线索引用不可删除
     */
    CLUE_EXIST_CAN_NOT_DELETE(11002005, "已被销售线索引用，不可操作", ""),
    /**
     * 已被客户引用为主要联系人不可删除
     */
    CUS_EXIST_IMPORT_CONTACT_CAN_NOT_DELETE(11002006, "已被客户引用为主要联系人不可删除", ""),
    /**
     * 客户名称已存在
     */
    CUS_NAME_EXIST(11002007, "客户名称已存在", ""),
    /**
     * 客户统一社会信用代码已存在
     */
    CUS_USCC_EXIST(11002008, "客户统一社会信用代码已存在", ""),

    /*
     *********************商机********************
     */
    /**
     * 商机不存在
     */
    BUS_NOT_EXIST(11003001, "商机不存在", ""),
    /**
     * 报价书不存在
     */
    QUO_NOT_EXIST(11003002, "报价书不存在", ""),
    /**
     * 已被商机引用不可删除
     */
    BUS_EXIST_CAN_NOT_DELETE(11003003, "已被商机引用，不可操作", ""),
    /**
     * 已被商机引用为主要联系人不可删除
     */
    BUS_EXIST_IMPORT_CONTACT_CAN_NOT_DELETE(11003004, "已被商机引用为主要联系人不可删除", ""),
    /**
     * 该商机已被其他展会使用
     */
    BUS_EXIST_EXHIBITION(11003005, "商机已被其他展会使用", ""),
    /**
     * 展会已经绑定其他商机
     */
    EXHIBITION_EXIST_BUS(11003006, "展会已经使用其他商机，该商机无法绑定", ""),
    /**
     * 时间周期不可为空
     */
    QUO_DETAIL_PRICE_DURATION_NOT_NULL(11003007, "时间周期不可为空", ""),
    /**
     * 线索已被其他商机使用
     */
    CLUE_EXIST_BUS(11003008, "线索已被其他商机使用", ""),

    /*
     *********************展会********************
     */
    /**
     * 未找到对应展会.
     */
    EX_NOT_FIND_EXHIBITION(11004003, "未找到对应展会！", ""),

    /**
     * 未找到对应数据.
     */
    RE_NOT_FIND(11004005, "未找到对应数据！", ""),

    /**
     * 不能删除主要负责人.
     */
    RE_CANT_REMOVE(11004006, "不能删除主要负责人！", ""),

    /**
     * 该环节不能删除.
     */
    SG_CANT_REMOVE(11004007, "该环节不能删除！", ""),

    /**
     * 结算失败.
     */
    EX_SETTLE_FALSE(11004008, "结算失败！", ""),

    /**
     *
     */
    EX_NAME_EXIST(11004009, "展会名称已存在", "The exhibition name already exists"),

    /**
     * 已被展会引用不可删除
     */
    EX_EXIST_CAN_NOT_DELETE(11004010, "已被展会引用，不可操作", ""),

    /**
     * 展会不可更换商机
     */
    EX_CAN_NOT_CHANGE_BUSINESS_OPPORTUNITY(11004011, "展会已确认，不可更换商机", ""),

    /**
     * 展会布展时间不可以超过展览时间
     */
    EX_CANT_ARRANGEMENT_MORE_TRAN_EXHIBITION(11004012, "展会布展时间不可以超过展览时间", ""),

    /**
     * 展会展览时间不可以超过撤展时间
     */
    EX_CANT_EXHIBITION_MORE_TRAN_DISMANTLING(11004013, "展会展览时间不可以超过撤展时间", ""),

    /**
     * 存在相同的场地，展会不可在多个报价书中对同一场地报价.
     */
    EX_QUO_EXIST_SPACE(11004014, "存在相同的场地，展会不可在多个报价书中对同一场地报价", ""),

    /**
     * 开始时间不可以超过结束时间
     */
    EX_CANT_START_MORE_TRAN_END(11004015, "开始时间不可以超过结束时间", ""),
    /**
     * 合同已经付款，不可置为失效
     */
    EX_CANT_NOT_CLEAR_CONTRACT(11004016, "合同已经付款，不可置为失效", ""),

    /**
     * 业务编号已存在
     */
    EX_NO_EXIST(11004017, "业务编号已存在", "The exhibition no already exists"),

    /**
     * 展会已存在主办.
     */
    EX_SPONSOR_HAS_EXIST(11004018, "展会已存在主办", ""),

    /*
     *********************合同********************
     */
    CONTRACT_DOES_NOT_EXIST(11005001, "合同不存在", "contract does not exist"),
    /**
     * 支付系统合同保存失败.
     */
    CONTRACT_NOT_SAVE(11005002, "支付系统合同保存失败", ""),

    /**
     * 支付系统合同删除失败.
     */
    CONTRACT_NOT_DELETE(11005003, "支付系统合同删除失败", ""),

    /**
     * 合同有有认款记录.
     */
    CONTRACT_HAS_COLLECT(11005004, "合同有认款记录，不可删除或失效", ""),
    /**
     * 已被合同引用不可删除
     */
    CONTRACT_EXIST_CAN_NOT_DELETE(11005005, "已被合同引用，不可操作", ""),
    /**
     * 支付系统合同付款信息查询失败
     */
    CONTRACT_FINANCE_QUERY_ERROR(11005006, "支付系统合同付款信息查询失败", ""),
    /**
     * 报价书已被其他合同使用
     */
    QUOTATION_EXIST_CONTRACT(11005007, "报价书已被其他合同使用", ""),
    /**
     * 已被合同引用，请先删除对应合同
     */
    CONTRACT_EXIST_CAN_NOT_DELETE_QUOTATION(11005008, "已被合同引用，请先删除对应合同", ""),

    /**
     * 未选合同模板
     */
    CONTRACTNOT_TEMPLATE(11005009, "合同未选模板", ""),

    /**
     * 合同不可作废.
     */
    CONTRACT_CAN_NOT_CANCEL(11005010, "合同不可作废", ""),

    /*
     *********************财务********************
     */
    /**
     * 支付系统删除支付计划失败.
     */
    PAYMENT_PLAN_NOT_DELETE(11006012, "删除支付计划失败", ""),
    /**
     * 支付系统保存或更新支付计划失败.
     */
    PAYMENT_PLAN_NOT_SAVE_UPDATE(11006013, "保存或更新支付计划失败", ""),
    /**
     * 查询支付计划失败.
     */
    PAYMENT_PLAN_QUERY_ERROR(11006014, "查询支付计划失败", ""),
    /**
     * 查询支付记录失败.
     */
    PAYMENT_RECORD_QUERY_ERROR(11006015, "查询支付记录失败", ""),
    /**
     * 认款失败.
     */
    COLLECT_ERROR(11006016, "认款失败", ""),
    /**
     * 取消认款失败.
     */
    UNCOLLECT_ERROR(11006017, "取消认款失败", ""),
    /**
     * 查询认款记录失败
     */
    COLLECT_RECORD_QUERY_ERROR(11006019, "查询认款记录失败", ""),

    /*
     *********************其他********************
     */
    /**
     * 文件导出失败
     */
    EXPORT_ERROR(11007001, "文件导出失败", ""),
    /**
     * 附件查询失败
     */
    FILE_FOUND_ERROR(11007002, "附件查询失败", ""),
    /**
     * 附件保存失败
     */
    FILE_SAVE_ERROR(11007003, "附件保存失败", ""),
    /**
     * 附件删除失败
     */
    FILE_DELETE_ERROR(11007004, "附件删除失败", ""),

    /*
     *********************展厅分类********************
     */

    /**
     * 展厅分类名称已存在
     */
    SPC_EXISTENCE(11008001, "展厅分类名称已存在", ""),


    /*
     *********************价目表********************
     */

    /**
     * 展厅已被价目表引用不可删除
     */
    NOT_DEL_SPACE(11009001, "展厅已被价目表引用不可删除", ""),
    /**
     * 价目表下展厅不可为空
     */
    IS_NULL_PRICELIST_SPACELIST(11009002, "价目表下展厅不可为空", ""),

    /*
     *********************场馆预定********************
     */
    /**
     * 场地预定申请不存在
     */
    VENUE_BOOK_NOT_EXIST(11010001, "场地预定申请不存在", ""),
    /**
     * 外部系统展会code已存在.
     */
    VENUE_BOOK_EXTERNAL_EXHIBITION_CODE_EXIST(11010002, "外部系统展会code已存在", ""),
    /**
     * 活动编号已存在
     */
    VENUE_BOOK_EXHIBITION_NO_EXIST(11010002, "活动编号已存在", ""),

    /**
     * 未找到收款方
     */
    PAYEE_NOT_EXIST(18007000, "未找到收款方", ""),

    /**
     * 收款方在支付系统未配置.
     */
    PAYEE_NOT_CONFIG(18007001, "收款方在支付系统未配置", ""),
    ;

    private final int code;
    /**
     * 中文消息
     */
    private String msg;
    /**
     * 英文消息
     */
    private String enMsg;

    VenueBookingExceptionCode(int code, String msg, String enMsg) {
        this.code = code;
        this.msg = msg;
        this.enMsg = enMsg;
    }

    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        //中英文切换
        if (LanguageTypeEnum.CN.name().equals(ContextUtil.getLanguageType())) {
            //中文
            return msg;
        } else if (LanguageTypeEnum.EN.name().equals(ContextUtil.getLanguageType())) {
            //英文
            return enMsg;
        }
        return msg;
    }


    /**
     * Build venue booking exception code.
     *
     * @param msg   the msg
     * @param param the param
     * @return the venue booking exception code
     */
    public VenueBookingExceptionCode build(String msg, Object... param) {
        this.msg = String.format(msg, param);
        return this;
    }

    /**
     * Param venue booking exception code.
     *
     * @param param the param
     * @return the venue booking exception code
     */
    public VenueBookingExceptionCode param(Object... param) {
        msg = String.format(msg, param);
        return this;
    }
}
